package com.java.thread.demo.chapter1.interrupt;

/**
 * Created by yiyongyao on 2017/12/19.
 */
public class TestMain {
    /**
     * 停止线程 interrupt() ; stop()已经被废弃,不做介绍
     *
     * @param args
     */
    public static void main(String[] args) {


        //test1();

        //test2();

        test3();


    }

    /**
     * 正确使用 interrupt() 中断线程  --- 异常法 ; 不建议使用break和return停止线程方法;
     *
     *  子线程用 interrupted() 处理 , 直接中断线程,也清除了中断状态 ;
     *  如果for循环只用break的话,会继续执行for外面下的逻辑,如果不希望for循环外的代码被执行,需要 throw new exception();
     *
     *
     */
    private static void test3() {

        try {
            MyThreadInterrupt interruptRun = new MyThreadInterrupt();
            //Thread thread = new Thread(interruptRun);
            //thread.start();
            interruptRun.start();
            interruptRun.sleep(10);
            interruptRun.interrupt();
            System.out.println("线程是否停止 isInterrupted() " + interruptRun.isInterrupted());
            System.out.println("end");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }


    /**
     * interrupted()
     * 测试当前线程是否中断  this.interrupted()
     * 对线程进行停止,该方法会清除中断状态
     * <p/>
     * 如果 第一次是true 那么第二次就false
     * 第一次false  第二次也是false
     * <p/>
     * isInerrupted() 判断线程是否已经停止,不清除中断状态
     * 第一次  true 第二次还是true
     */
    private static void test2() {


        try {
            MyThread run = new MyThread();
            Thread thread = new Thread(run);
            thread.start();
            Thread.sleep(10);
            thread.interrupt();
            System.out.println("interrupted 是否停止 ? " + thread.interrupted());  //当前线程是main未停止
            System.out.println("isInterrupted 是否停止 ? " + thread.isInterrupted()); //线程是thread 已经停止
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    /**
     * thread.interrupt(); 并没有停止运行的线程,线程还是自己执行完结束
     */
    public static void test1() {

        try {
            MyThread run = new MyThread();
            Thread thread = new Thread(run);
            thread.start();
            Thread.sleep(2000);
            thread.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

}
